package com.free.ext.logger.converter;

import java.util.UUID;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

import com.free.ext.logger.layout.CustomizePatternLayout;

/**
 * <p>
 * 功能概述: 
 * </p>
 * <p>
 * 功能详述: 
 * </p>
 */
public class SessionIdConverter extends ClassicConverter
{

    @Override
    public String convert(ILoggingEvent event)
    {
        String id = MDC.get(CustomizePatternLayout.SESSION_ID);

        if(StringUtils.isEmpty(id)){
            if(ConverterExtendParam.get() == null || StringUtils.isEmpty(ConverterExtendParam.get())) //dubbo调用时,MDC中没有值，dubbo与当前进程非同一线程
            {
                return UUID.randomUUID().toString();
            }
            else
            {
                return ConverterExtendParam.get();
            }
        }
        
        return id;
    }

    /*========================================================================*
     *                         Public Fields (公共属性)                                                                
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)                                                                
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法) 
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)                                                                   
     *========================================================================*/

    /*========================================================================*
     *                         Private Methods (私有方法)                                                                   
     *========================================================================*/
}

